home *** CD-ROM | disk | FTP | other *** search
- #
- # $Id: History,v 1.10 1994/06/05 17:29:31 heinz Exp $
- #
-
- This is the history from the original 1.7 source up to now:
-
- 2.0 HWG internal
-
- - SAS/C 6.x compatibility
-
- - Added 24 bit capabilites. Note that any of the 24 plane ptrs can
- be set to NULL to achieve "partial" rendering of bitplanes. This
- way you can render e.g. a 300 dpi A4 24 bit image one plane
- at a time even on a small machine doing 24 passes. Afterwards you
- could combine the planes on HD to a full image. This seems to be
- easier than rendering clips with a depth of 24 bit.
-
- - sethalftonephase.
-
- - integrated Tom Rokicki's fixes.
-
- - handling of illegal type 3 encodings (well sort of).
-
-
- 2.1 HWG still not public
-
- - After a virtual memory restore the current font setup was totally
- messed up, which resulted in a invalidfont error in the best case.
- Worse cases were possible.
- I fixed this by removing a few global (Yuck!) font variables and
- integrating them into the graphics state. As a side effect calls
- to show are now faster.
-
- - For errstackoverflow and errdictstackoverflow the stacks were not
- cleared as the should be according to Adobe. The fix for the
- operandstack is complete. For the dictstack and execstack there
- might be still a problem. I currently have no idea how to solve
- multiple stack overflows and the Adobe manual doesn't really tell
- what should happen if the execution stack runs over its limit.
-
- - For the first time I put it into RCS.
-
- 22 HWG still not public
-
- - The new local/global VM scheme seems to be working now.
- The dictstack is like in a level 2 implementation now.
- The overhead needed triggers an increase of memory use of about
- 80% for all objects. I don't see a way to reduce this if I want
- to keep going to level 2. No idea yet on how to implement a nice
- garbage collection without adding _major_ overhead to object
- handling. At least a restore does a true memory free now.
-
- - New operators: setglobal, currentglobal, gcheck, scheck,
- glyphshow, <<, >>, undef, arct,
- setstrokeadjust, currentstrokeadjust,
- setbbox.
-
- - Neither setbbox nor the strokeadjust stuff is tested.
-
- - The strokeadjust stuff doesn't really do a decent strokeadjust
- currently. It is more of an experiment right now.
-
- - GlobalFontDirectory is now there, (Shared variant, too).
-
- - putinterval now deals with packed arrays.
-
- - execstack now correctly clears the attributes for all copied
- objects.
-
- - dictionaries conform to level 2 now and expand as needed.
-
- - undef is implemented. It doesn't reduce the dictionary size. It
- just invalidates the entry. (Note: This is not a typenull!)
-
- - null is no longer an operator but a constant.
-
- - The complete system name table according to the adobe reference
- manual appendix F is now implemented.
-
- - The object types are now numbered according to the red book,
- page 113, table 3.14.
-
- - Hashing in nametoken() should be a little faster now.
-
- - clippath will no longer return an empty clipping path. Instead
- it will return a zero area path at (0,0) device space.
-
- - <~ASCII85~> implemented, not tested.
-
- - Some speedups in scantoken.
-
- - Only PaintTypes 0 and 2 are accepted now, not tested.
-
- - CDevProc handling put in, not tested.
-
- - added 'a' and '+' modes to file opening, not tested.
-
- - defineuserobject/undefineuserobject/execuserobject, not tested.
-
- - filter mechanism in place, eexec runs on top of it now.
- dct, ccittfax, and lzw filters missing, proc and string input not
- tried.
-
- - Real BlueValues with a zero fractional part are now accepted to
- allow use of broken fonts.
-
- - /loadfont in init.ps discards garbage on the operand stack left
- by the font.
-
- - filenameforall implemented. I need this functionality for the
- resource ops. Limited testing.
-
- - setobjectformat, currentobjectformat implemented. Not tested.
-
- - error handling should be pretty much level 2 compliant now
- except for "binary" and stackoverflow handling inside the error
- handler itself. Not really tested.
- stackoverflow handling inside the error functions is a nasty one,
- as we don't have Level 2 compliant expanding stacks. This
- actually doesn't matter, as even a "true" level 2 interpreter
- could run out of memory in that situation. It seems to be an
- obscure and undefined case. I handle it my way. At least it
- should not crash.
-
- - character showing could be a little faster now. Hashing for
- it does not need multiplications anymore. It uses shifts and
- additions.
-
- - status should handle a string arg now. Not tested.
-
- - renamefile, deletefile, fileposition, setfileposition
- implemented. Not tested.
-
- 22.3 HWG still not public
-
- - callextfunc now no longer public. It is nasty stuff anyway.
-
- - Now the names @vmhwm, @prompts instead of vmhwm, prompts.
-
- - many internal speedups and simplifications. Don Knuth said that
- "premature optimization is the root of all evil.". This is of
- course true, but I mainly cleaned up quite some code to make
- it more readable to me and "reduced" definitely unneeded type
- sizes. The speedups came as a positive side effect, though they
- are probably not that noticeable with standard PostScript code.
-
- - imaging and filling now in separate source files. It was all too
- big IMHO.
-
- - For displays with less than 100 dpi on at least one axis, a
- default halftone frequency of 30 instead of 60 is chosen now.
- This gives at least some halftoning on screen as default which
- makes many pictures look much nicer. I am not sure that this
- conforms to the B&W book where it is said that 60 is returned as
- default, but it gives better results for B.J.User. So what the
- heck ...
-
- - When grestore behaves like a noop because there is nothing to
- restore, the halftone screens are no longer invalidated.
-
- - copy is now level 2 compliant for dictionaries. No attribute
- changes anymore for the destination.
-
- - There was some unlogical code in calclogicaldepth (pun intended)
- which IMHO could have failed under special circumstances. Should
- be safer now.
-
- - When closing an eexec file, the dictstack is popped only if there
- is sysdict on top of it. Anything else is silently ignored to
- avoid recursion caused by the error handler (which can cause
- files to be closed, too).
-
- - Implemented a ForceBold mechanism for type 1 fonts. If
- ForceBold is true and a stem would be rendered 1 pixel wide
- because its width is >= 1.3 and < 1.5 it will be thickened to two
- pixels. 1.3 seems to give visually acceptable results. 1.25
- as limit for rounding up looks pretty unreadable already.
-
- 22.4 HWG still not public
-
- - StdXW and StemSnapX implemented. "Snapping" should work when the
- delta to the actual width is less than 1.0 _pixel_.
-
- - Implemented FamilyBlues and FamilyOtherBlues.
-
- - selectfont is now built in and behaves correctly.
-
- - Major rework of the font machinery to help adding the composite font
- extensions. Now most of the vars needed for rendering are cached
- at setfont time. I trade memory for speed.
-
- 22.5 HWG still not public
-
- - Moved the ForceBold limit up to 1.4. 1.3 just doesn't look too good.
-
- - Major rework of the font caching. The font cache size can now be
- changed (needed for setcacheparams) and with a tiny little change
- the efficiency of the font cache has gone up it seems.
-
- - Implemented setcacheparams, currentcacheparams.
-
- 22.6 HWG still not public
-
- - Setup internals for the implementation of User Parameters. This causes
- changes to VM handling, font handling, and the interpreter stack setup.
- All other values are currently noops.
-
- - currentuserparams, setuserparams, setvmthreshold implemented.
- Currently we don't have any garbage collection. So the value you set with
- setvmthreshold does nothing.
-
- 22.7 HWG still not public
-
- - Somewhere in 22.7 I went to SAS/C 6.51.
-
- 22.8 HWG still not public
-
- - xshow, yshow, xyshow implemented. Seem to work well.
-
- - missing flush in error message output added.
-
- - rectfill, rectclip, rectstroke.
-
- - half a ton of const keywords added to many functions.
-
- - setgstate, gstate, currentgstate. Not tested.
-
- - forall should no longer enumerate read protected keys.
- I am not exactly sure that this is correct behaviour, though.
-
- - kshow resets the current font after executing the proc if
- necessary.
-
- - findresource will behave as in a "small memory" situation as
- Adobe names it. That is, it will never fiddle with the VM mode
- even for type 3 fonts, unlike e.g. Display PostScript does
- according to Adobe.
-
- - moved definefont and undefinefont over to using resource
- primitives. I don't even know right now if it will compile. ;^)
- Uhm, as you see, undefinefont should be available now, too.
-
- - Implemented @RegisterDiskResource to tell HWGPOST what external
- resources are available.
-
- - findfont is using resources now, too.
-
- - init.ps is setting up the disk resources now!
-
- - eexec should behave like run now. It should automatically close
- the file it creates on EOF _and_ on any other termination! This
- should fix "{eexec} stopped" like constructs which used to leave
- systemdict on the dictionary stack.
-
- - findfont, definefont, and undefinefont are now defined in terms
- of resource operators as described in the R&W book.
-
- - ISOLatin1Encoding, StandardEncoding, and findencoding are now
- defined in terms of resource operators as described in the R&W
- book.
-
- - Split up font handling and show handling even more. Another
- source file postshow.c is now available.
-
- 22.9 HWG still not public
-
- - minor cosmetic reworks in some publically visible files
-
- 22.10 HWG first public beta release
-
- - currentcolortransfer returned garbage. Should be fixed now.
-
- - Internal preparations for setting up color spaces!
-
- - setcolor implemented. Not tested.
-
- - setoverprint. Note that this is a no op currently!
-
- - currentoverprint.
-
- - created postcolor.c with all the colorspace handling stuff.
-
- - Family[Other]Blues check still had a bug that showed with the "d"
- of the Times-Italic I have here. Should be fixed now.
-
- - I commented out the halftonephase ops for now. This will need
- much work _after_ patterns are done. Any halftonephase != 0 will
- probably slow done rendering a lot then.
-
- - sethalftone, currenthalftone, general halftone dictionary
- support. Not tested at all.
-
- - This just came to mind. Did I mention that the scanner no longer
- uses the isspace() macro, but truly checks according to the R&W
- book specs for white space? This has been in there for quite some
- time.
-
- - Added provision for true CMYK rendering into the bitplanes
- instead of RGBW on the fly. This has actually been done
- earlier already, but now it is enabled. Not tested.
-
- - For the pattern color space, I need a masking feature. So I
- enhanced the device structure to provide for a mask.
-
- - Big problems with the image ops and handling of the Decode array
- fixed. It wasn't decoded correctly anyway and it wasn't used at
- all for gray scale devices.
-
- - A missing flush in effect mixed error output and output
- by e.g. =, ==, pstack in an inappropriate way.
-
- 22.11 HWG internal
-
- - /version should be a string now. Sorry for the inconvenience.
-
- - curveto with the same start and end point now works as intended.
-
- - pathforall now copies the path into an internal buffer before
- enumerating it. This way changes to the current path while
- pathforall is active no longer hurt the result.
-
- - Commented out sethalftone/currenthalftone and setcolor for now.
- They are not fully functional yet, and their presence might
- confuse valid PostScript files.
-
- - Serious bug in handling of parameters for the image operators
- resulted in errors for 8 bits per sample. Found this by accident
- only. :-(
-
- 22.12 HWG release for NOVA.
-
- - True halftone phase support is back. It should be general enough
- to be a base for patterns. Rendering of halftone screens is
- slower now than before. I might add a special optimized halftone
- function for standard filling though that runs fast for any x
- shift of 0 or by a multiple of 8 pixels.
-
- - Fixed a bug that could possibly mess up halftoning for very
- small vertical rendering. Never noticed this though.
-
- - Added deviceinfo to make /processcolors in statusdict easier.
- processcolors has been added, too (In init.ps!). Why I did this
- now? I just got news about /processcolors and before I forget
- about it, I add it.
-
- - Bookman-Light showed me a possible problem with eexec decoding.
- Though I think that Bookman-Light actually violates type 1 font
- specs, I added special code to the file handling to work around
- the problem for IBM font style binary encoded eexec portions.
- The above is a euphemism for "hack added to make ugly stuff
- work".
-
- Note: Anyone complaining about a font not working is required to
- provide me with a legal copy of the font for my own use
- from now on. Argh!
-
- Sidenote: Bookman-Light 001.003 is buggy according to Adobe. In
- 001.004, the problem is supposedly fixed.
-
- - Work on Separation/Indexed colorspaces to get all the interfaces
- for patterns set up. Tricky and not yet visible to the user.
- Probably not for a while.
-
- - To get best performance and memory use for any halftoning or
- patterns, you should have a width of the cell that is a multiple
- of eight device pixels. Any halftone phase other than a multiple
- of eight will slow down cell rendering. Any width other than
- a multiple of eight will (sometimes considerably) increase memory
- use. This is especially important for users of halftone
- dictionaries. The cell will be replicated in x direction until a
- byte aligned width is achieved. So e.g. for a 9 pixel wide cell,
- the actual internal width and memory requirement will be 9 * 8 ==
- 72 pixel per line, which can be evenly divied by 8. If I did not
- do it like that, rendering would not take long, but forever.
- Actually it is not a new invention. The default halftone screens
- always did it like that. I used this for halftone screens
- specified via dictionaries only, and I have reason to assume that
- I'll need it for patterns.
-
- - eexec reworked again. It now uses a destructor to pop the system
- dictionary. The file handling is back to normal. No strange stack
- handling within closing of files anymore. I feel that this is
- good news.
-
- - Interesting enough, the eexec rework led me to a problem with the
- implementation of resource ops while debugging. Tricky
- manual stack manipulation after a resource op caused an error
- could cause a crash. Should be robust now.
-
- - setdevparams, currentdevparams. They are dummies that don't do
- very much. setdevparams will always give an error and
- currentdevparams returns an empty dictionary.
-
- - Reworked halftone validating mechanism in my quest for patterns.
- I made it look more "black box" for the callers which should help
- me a lot in the future. As a side effect a few unnecessary
- invalidations of halftone screens could be removed.
-
- - Color handling behaves better now, too. Setting a colorspace and
- setting the colors is much cleaner internally now and colors will
- be only set once not twice for every colorspace/color change. Oh
- well. Not exactly true. sethsbcolor will first set the colorspace
- and with that the initial color, and then the requested hsb color
- will be set. That is what you get for using strange stuff.
-
- - I'll have to design a general bitmap caching scheme within the VM
- handling. This will cover hopefully characters, patterns, and
- forms. Maybe I can even do something about user paths then, but I
- doubt it. While thinking about this and looking at the current
- font cache handling, I could fix a possible hole in font type
- checking and improve VM efficiency with save/restore
- combinations. Strange how things hang together sometimes.
-
- - For the Pattern color space, the font cache will be ignored. A
- rendering function would be needed that I am not willing to
- design to support rendering of the font cache in any reasonable
- way. So with patterns all characters will be rendered the slow
- way.
-
- - The interrupt signals will be checked now in '=', '==', and in
- 'pstack'. While doing this, I added correct defines for the
- signals to postlib.h. I added defines for the garbage collection
- that does not yet exist, too.
-
- - Changed style of error display to something supposedly much more
- Adobe like.
-
- - Changed rounding factors for setstrokeadjust to 0.25, i.e. I use
- the 1/4 method suggested in "PostScript by Example". Should give
- slightly better results. Why didn't I think of that in the first
- place?
-
- - Interesting enough there was a bug in VM save/restore handling.
- restore would not correctly restore things in all circumstances
- because marking of allocations was off by one.
-
- - Handling and closing of the currentfile was not exactly "ok". It
- should work better now, and currentfile should never return
- "wrong" file handles. Uhm well, if no file exists, currentfile
- will return %stdin to return something. There is not really a
- concept of an invalid file object.
-
- - There should no longer be any "hanging" file open calls when an
- error occurs. When a file is closed, it is closed now. No fake
- close handling anymore to keep the interpreter happy. I
- originally missed a paragraph in the R&W book saying how it works
- and messed it up. Now it is done right (I hope).
-
- - Time for a freeze.
-
- 22.13 HWG internal
-
- - Threshold halftoning was ... uhm ... totally broken. It should
- work now. This paragraph doesn't tell how much time I spent on it.
- As a positive side effect of the rework, the halftone cache is
- now smarter. Going from black to white shold be as fast now
- as going from white to black when asking for halftones.
-
- - sethalftone is now available.
-
- - Still a "typo" in the new error message format corrected.
-
- - There could still be "hanging" file open calls when the execution
- stack was popped, e.g. on error or quit. Now any files
- encountered while popping the execution stack will be closed.
- This should help a lot.
-
- - Note: kshow does not create a loop context currently! I'll fix
- this when I am into composite fonts. I'll need to invest some
- thought into this. Colorspaces are still first on my list.
-
- - BTW, if you guys out there want CIE color spaces, buy a decent
- book on the subject, and send it to me. The R&W book isn't all
- that clear, and afterall it would be nice if I didn't have to
- spend all my money on this. :-) If nothing like this happens, CIE
- color spaces won't come soon.
-
- - In systemdict you will now find /=string with a length of 128.
-
- - Added the destructor concept to vm restore handling to make cache
- flushing independent of vm handling.
-
- - name table handling is now more black box, too. I need all this
- black box handling to implement the new general caching scheme.
- A small change to the hashing in name token seems to have helped
- lookup performance.
-
- - Added @calluserhook. Not tested yet.
-
- mark <args> <hookadr> <msgadr> @calluserhook
-
- ==>
-
- mark <resargs> <resint>
-
- ints, reals, bools, or strings may be used as args with a maximum
- number of 8 arguments. The values are put into an array of longs
- that is passed as object address to the hook. For strings two
- slots in the array are used for address and length. On return the
- values of ints, bools, and reals will be copied back into the
- internal PS objects. The called function runs on the context of
- post.library and might need to set up A4 from e.g. hook->h_Data
- to make use of its local near data segment. No assumptions may be
- made about post.library's context! It is private stuff!
-
- All this should help people needing to interface to external code
- a lot.
-
- - The new general caching scheme is in place now. While it has more
- overhead than the old font cache, there does not seem to be a
- performance hit as hashing and caching is a little smarter.
-
- - For blue values any reals are now accepted and converted to
- integers.
-
- - Some cleanup to the font and show handling for the new caching
- scheme.
-
- - exit always had a bug. It would look below the lower end of the
- exec stack. One object too much. Ouch.
-
- - kshow now has a loop context that can be exited via exit. I don't
- have composite fonts yet, sorry.
-
- - While testing pattern generation, I found that gstate object
- handling was in fact totally broken. The paths were not saved
- correctly. This works now. Otherwise patterns would not work.
-
- - Patterns seem to work now. Please note that patterns are sort of
- slow to render because there is a lot of work to do for this
- including floating point calculations when a cached pattern is
- imaged onto the page. Patterns are also memory hungry. If you know
- the bounding box in device space (i.e. in pixels of the
- bitplane!), you can estimate how much memory patterns eat. They
- use bitplanes in the size of the bounding box. One mask bitplane
- is always needed and for colored patterns you'll need one
- pattern bitplane per device bitplane. Currently there is no
- setsystemparams call and the maximum amount of bytes for the
- pattern cache is ~60K. As we don't have a garbage collection yet,
- allocated memory for the pattern cache will stay allocated until
- it is either reused or invalidated by a VM restore.
-
- - Hopefully not too many bugs lurk inside pattern handling. BELIEVE
- ME, PATTERNS ARE TRICKY TO HANDLE!
-
- - As I said above, drawing characters with patterns does not use
- the font cache and probably never will. It is slower of course
- but it works the same and doesn't add tons of special handling
- to rendering.
-
- - Corrected a sign bug that messed up 360 degree arcs with arcn.
- This one has been in there since at least 1.7. I found this while
- testing patterns.
-
- 22.14 HWG the pattern freeze.
-
- - The band rendering operators are now named "@currentband" and
- "@setband". To keep compatibility to old post.library usage, I
- added a kludge to init.ps to define the old names in terms of the
- new names. Using the old names is strongly discouraged, though!
-
- - Oh well, I forgot to mention that the masking feature contained
- in the struct PSextdevice works and may be used. If it wouldn't
- be working, patterns would not work at all.
-
- - An interesting comment on the side is that the interpreter source
- is still fairly portable even with those many changes. So if I
- was ever to find a computer with a better OS than the Amiga, I
- could take the interpreter with me. Don't fear anything, though.
- There isn't any better OS around for me as far as I can see.
-
- - Cleaned up names for extended PSsignalint() flags.
-
- - Added missing PSerrstr prototype and pattern cache default sizes.
-
- 22.15 HWG
-
- - Just found a bug when testing the release version. Font caching
- would not work correctly.
-
- - I totally forgot to mention that XUID's should work for fonts and
- patterns.
-
- 22.16 HWG Pattern Release
-
- *** EOT ***
-
-